"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/10/29 15:51
@Description : 学生信息管理系统 v1.0
功能介绍
    1.程序运行输出功能清单 样式如下
         ********************欢迎使用学生信息管理系统*************************
         1. 学生列表
         2. 查询学生
         3. 添加学生
         4. 修改学生
         5. 删除学生
         6. 退出程序
         ********************************************************************
   2.用户选择对应的功能，进入具体的功能操作
       学生列表 ： 打印所有学生的信息
       查询学生 ： 根据学号查询一个学员的信息并输出
       添加学生:  接收用户输入的数据并保存   学号要唯一
       修改学生： 根据学号修改学生信息
       删除学生: 根据学号删除学生信息  并打印删除的学生信息
       退出程序:  结束程序运行
   3.每项功能完成后，输入0继续，输入其它直接退出
   4. 学生信息包含  学号  姓名  年龄   班级  分数

思路分析:
   1. 整个程序应该在循环结构中   break
   2. 功能选项  选择结构   match  case  等值
   3. 数据存储的容器  字典  列表
"""
#  pip install   prettytable
from prettytable import PrettyTable

table = PrettyTable()
# 设置表头
table.field_names = ['学号', '姓名', '年龄', '分数', '班级']
#  欢迎信息
welcome_info = """
********************欢迎使用学生信息管理系统*************************
         1. 学生列表
         2. 查询学生
         3. 添加学生
         4. 修改学生
         5. 删除学生
         6. 退出程序
********************************************************************
"""
# 定义列表 存储多个学生信息
students = []

while True:
    # 打印功能清单
    print(welcome_info)
    # 功能选择
    user_choice = input('请输入功能序号:')
    match user_choice:
        case '1':
            print('*' * 20, '学生列表', '*' * 20)
            if students:
                for student in students:
                    table.add_row(
                        [student['student_no'], student['name'], student['age'], student['score'], student['class']])
                print(table)
                #   清空表格数据行
                table.clear_rows()
            else:
                print('学生信息列表为空,请添加后再查看...')
        case '2':
            print('*' * 20, '查询学生', '*' * 20)
            if students:
                student_no = input('请输入学号:')
                for student in students:
                    if student['student_no'] == student_no:
                        table.add_row([student['student_no'], student['name'], student['age'], student['score'],
                                       student['class']])
                        print(table)
                        table.clear_rows()
                        break  # 查询到学生信息后 提前结束循环
                else:
                    print(f'{student_no}学号不存在...')
            else:
                print('学生信息列表为空,请添加后再查看...')
        case '3':
            print('*' * 20, '添加学生', '*' * 20)
            #     学号  姓名  年龄   班级  分数
            while True:
                student_no = input('请输入学号:')
                # 判定学号是否存在
                for student in students:
                    if student['student_no'] == student_no:
                        print(f'{student_no}学号已存在,请重新输入')
                        break
                else:
                    break  # 学号不存在

            name = input('请输入姓名:')
            age = input('请输入年龄:')
            score = input('请输入分数:')
            clazz = input('请输入班级:')
            student = {
                'student_no': student_no,
                'name': name,
                'age': int(age),
                'score': float(score),
                'class': clazz
            }
            students.append(student)
            print(f'{student}信息添加完成...')
        case '4':
            print('*' * 20, '修改学生', '*' * 20)
            if students:
                student_no = input('请输入学号:')
                # 判定学号是否存在
                for student in students:
                    if student['student_no'] == student_no:
                        edit_student = {}
                        # 开始修改学生信息
                        is_change = input('修改姓名【y/n】:')
                        if is_change == 'y':
                            name = input('请输入姓名:')
                            edit_student['name'] = name
                        is_change = input('修改年龄【y/n】:')
                        if is_change == 'y':
                            age = input('请输入年龄:')
                            edit_student['age'] = int(age)
                        is_change = input('修改分数【y/n】:')
                        if is_change == 'y':
                            score = input('请输入分数:')
                            edit_student['score'] = int(score)
                        is_change = input('修改班级【y/n】:')
                        if is_change == 'y':
                            clazz = input('请输入班级:')
                            edit_student['class'] = clazz
                        # 更新数据
                        student.update(edit_student)
                        print(f'{edit_student}信息更新成功')
                        break
                else:
                    print(f'{student_no}学号不存在')
            else:
                print('学生信息列表为空,请添加后再修改...')
        case '5':
            print('*' * 20, '删除学生', '*' * 20)
            if students:
                student_no = input('请输入学号:')
                for student in students:
                    if student['student_no'] == student_no:
                        students.remove(student)
                        print(f'{student_no}学生信息删除成功')
                        break
                else:
                    print(f'{student_no}学号不存在,删除失败')
            else:
                print('学生信息列表为空,请添加后再删除...')
        case '6':
            print('*' * 20, '退出程序', '*' * 20)
            break
        case _:
            print("选择的功能不存咋,请重新选择")
    # 是否退出
    is_exit = input('是否退出【y/n】:')
    if is_exit == 'y':
        break
print('程序结束,欢迎下次使用...')
